<?php
define('DS',DIRECTORY_SEPARATOR); 
define('SYS_DIR',dirname(__FILE__).DS);  //框架主目录
define('Cpath',SYS_DIR.'c'.DS); //控制层c层引用文件路径
define('V_DIR',SYS_DIR.'v'.DS);  //模板v层引用文件路径
define('M_DIR',SYS_DIR.'m'.DS);  //m层引用文件路径
define('WEB_DIR',realpath(SYS_DIR.'..'.DS).DS.'web'.DS);
define('BATH',realpath(SYS_DIR.'..'.DS).DS);   //根目录
define('IMG', WEB_DIR.'upload'.DS.'images'.DS);//上传图片目录
define('FIL', WEB_DIR.'upload'.DS.'files'.DS);//上传附件目录
define('MTR_KEY','%$^r8@!#');//素材加密密匙
date_default_timezone_set('Asia/Shanghai');//设置时区

class C_base {
	
	static function Run($path){

		$aa = explode('.',$path);  //分割目录指向，
		$cc = implode('/',$aa);    //转换成目录文件路径
		$cname = $aa[(count($aa)-1)]; //获取类名
		$fn = @$_GET['act'] ? @$_GET['act'] : 'index';  //方法名（默认index）
		$cpath = Cpath.$cc.'.php';  
		if(file_exists($cpath)){//检查文件是否存在
			self::file();   //包含公共文件库
			spl_autoload_register(function ($class) {//自动加载
				include $class.'.php';
			});
			require_once($cpath);//如果存在加载此文件
			$cnew =  new $cname(); //初始化 调用的c层文件类对象
			if(method_exists($cnew, $fn)){   //如果存在此方法
				$cnew->$fn();  //类-》方法
				$conn = util::object_array($cnew); //方法中的数据 object->array
				if(!$cnew->_is_html){  //查看是否存在模板
					self::dymb($conn,$fn);
				}
			}
		}
	}
	
	/**
	 * 加载基础文件
	 */
	static function file(){
		include BATH.'/vendor/autoload.php';
		self::yn_file('base'.DS.'class.database.php');
		self::yn_file('base'.DS.'class.htmltemp.php');
		self::yn_file('base'.DS.'class.admintemp.php');
		self::yn_file('base'.DS.'class.func.php');
		self::yn_file('base'.DS.'class.util.php');
	}
	
	static function yn_file($file){  //导入文件
		$file = str_replace("\\",DS,$file);
		require_once(SYS_DIR.$file);
	}
	
	/**
	 * 链接m层文件
	 * post	文件的路径
	 */
	static function M($post){
		$post = str_replace('.',DS,$post);
		self::yn_file('base'.DS.'class.table.php');
		self::yn_file('m'.DS.$post.'Model.php');
		$arr = explode(DS,$post);
		$num = count($arr);
		$name = $arr[$num-1].'Model';
		$new = new $name;
		return $new;
	}
	
	static function Dy($nr){//引用文件(eg:c.admin.adbase)
		$zhi = str_replace('.',DS,$nr);//将'.'替换成'\'
		$action = SYS_DIR.$zhi.'.php';//文件名称
		if(is_file($action)){//判断此文件是否存在
			require_once $action;//引用文件
		}
	}
	
	static function dybase($nr){//引用base文件夹下的文件,eg:dybase('tags');
		$action = SYS_DIR.'base'.DS.'class.'.$nr.'.php';//base文件夹下的某个类
		if(is_file($action)){//判断此文件是否存在
			require_once $action;//引用此文件
			$obj = new $nr();//初始化对象
			return $obj;
		}else{
			exit('非法操作');//不存在此文件
		}
	}
	
	/*c连c*/
	static function con($path){
		$dy = 'c.'.$path;
		$ps = explode('.',$path);
		$mn = array_pop($ps);
		$_controllers = array();
		self::Dy($dy);
		if (@!$_controllers[$mn]) {
			$_controllers[$mn] = new $mn();
		}
		return $_controllers[$mn];
	}
	
	static function own($path){//c引用c文件(eg:admin.adbase)
		$zhi = str_replace('.', DS, $path);//将'.'替换成'\'
		$action = Cpath.$zhi.'.php';//文件名称	
		if(is_file($action)){//判断此文件是否存在
			require_once $action;//引用此文件
			$met = explode('.', $path);//分割获取方法名
			$act = end($met);//获取数组中最后一个元素,最后一个为方法名
			$obj = new $act();//初始化对象
			$mett = @$_GET['met'] ? @$_GET['met'] : 'index';//如果传有方法则调用方法，否则默认调用index方法
			if(!method_exists($obj, $mett)){//判断类中是否存在此方法
				exit('文件'.$action.'中没有找到'.$mett.'方法');//不存在此方法，返回
			}
			$obj->$mett();//存在此方法，调用方法
			$conn=util::object_array($obj);//将对象转换成数组
			if(!$conn['_is_html']){  //查看是否存在模板
				self::dymb($conn,$mett);
			}
		}else{
			exit('没有找到文件'.$action);//不存在此文件
		}
	}
	
	static function dymb($conn,$met){//调用模板通用
		$template = @$conn['_render'].'temp';
		$temp = new $template();//初始化对象
		if($conn['_render'] == 'html'){
			$conn['_vpath'] = 'html/'.$conn['_mb'].'/'.$conn['_vtype'].'/'.$conn['_vpath'];
		}
		$temp->_temp($conn['_vpath'].$met,$conn);//调用模板
	}
	
}